% @author:夜剑听雨
% E-mail:2530595378@qq.com
% 2025.08.29
% 绘制频散图
clear;close all;
% 设置文件夹路径
inputFolder = './data/data_mat';
output2DFolder = './save_dir/plot/pic2d';
output3DFolder = './save_dir/plot/pic3d';

% 创建输出文件夹（如果不存在）
if ~exist(output2DFolder, 'dir')
    mkdir(output2DFolder);
end
if ~exist(output3DFolder, 'dir')
    mkdir(output3DFolder);
end

% 获取文件夹中所有 .mat 文件
fileNames = dir(fullfile(inputFolder, '*.mat'));
fileNames = {fileNames.name};  % 提取文件名


% 分析的频率范围（5-65 Hz）
RangeFreq = [5,65];
% 相速度范围（50-800 m/s，步长1 m/s）
ParaVelocity = [50 800 1];

nu = 0;      % 相位加权参数，默认为0，表示不启用
dataMode=0;  % 归一化方式，默认列归一化
% 遍历所有 .mat 文件
for i = 1:length(fileNames)
    % 构建文件路径
    filePath = fullfile(inputFolder, fileNames{i});
    % 加载数据
    load(filePath);

    data = shot.ZZ;        % Z分量数据
    offset = shot.offset;  % 偏移距
    dx = shot.dx;          % 道间距
    dt = shot.dt;          % 采样间隔

    %% 频散变换输入参数
    fs = 1/dt;  % 采样频率，单位为Hz
    % 计算每道接收距离（向量化）
    traceNum = size(data,2);    % 接收点数量
    r = offset + (0:traceNum-1)*dx;  % 每道的接收距离

    % 计算频散图
    [E, freq, v] = phaseShiftTransform(data,fs,r,RangeFreq,ParaVelocity,nu,dataMode);

    %% 画2d图
    hFig = figure('Visible', 'off');
    % 创建网格用于绘图
    [X,Y] = meshgrid(freq,v);
    % 图像分辨率
    resolution = 100;
    % 绘制等高线图
    [~,ch] = contourf(X,Y,E,resolution);
    % 移除轮廓线条
    set(ch, 'LineStyle', 'none');
    set(ch, 'EdgeColor', 'none');
    % 设置颜色映射
    colormap(jet);
    % 平滑着色
    shading flat;
    % 添加颜色条
    colorbar;
    set(gca,'YDir','normal');
    title('相移法频散图2D');
    xlabel('Frequency（Hz）');
    ylabel('Phase velocity（m/s）');
    % 保存2D图
    output2DPath = fullfile(output2DFolder, [strrep(fileNames{i}, '.mat', '_2D.jpg')]);
    saveas(hFig, output2DPath, 'jpg');
    close(hFig);

    %% 绘制3D频散图
    hFig = figure('Visible', 'off');
    % 创建网格用于绘图
    [X, Y] = meshgrid(freq, v);
    % 绘制3D曲面图
    surf(X, Y, E);
    colormap(jet);
    shading interp;
    grid on;

    % 设置坐标轴标签和字体
    title('相移法频散图3D');
    set(gca, 'FontSize', 10);
    xlabel('Frequency [Hz]', 'FontSize', 10, 'Fontweight', 'normal');
    ylabel('Phase velocity [m/s]', 'FontSize', 10, 'Fontweight', 'normal');
    zlabel('Normalized amplitude', 'FontSize', 10, 'Fontweight', 'normal');

    % 设置视角
    az = 45;
    el = 45;
    view(az, el);
    % 保存2D图
    output3DPath = fullfile(output3DFolder, [strrep(fileNames{i}, '.mat', '_3D.jpg')]);
    saveas(hFig, output3DPath, 'jpg');
    close(hFig);
end
disp('程序结束！！！')